package estacion.dominio;

import java.util.Vector;

import estacion.persistencia.FPAutobus;
import estacion.persistencia.FPTramo;

public class Tramo {

	private int Codigo_tramo;
	private int Codigo_linea;
	private String Parada_origen;
	private String Parada_destino;
	private double Duracion_recorrido;

	public Tramo(){
		Codigo_tramo = 0;
		Codigo_linea = 0;
		Parada_origen = "";
		Parada_destino = "";
		Duracion_recorrido = 0.0;
	}
	
	public Tramo(int c_tramo, int c_linea, String p_origen, String p_destino, double d_recorrido){
		Codigo_tramo=c_tramo;
		Codigo_linea=c_linea;
		Parada_origen=p_origen;
		Parada_destino=p_destino;
		//comprobarParadas(); 		
		Duracion_recorrido=d_recorrido;
	}
			
	private void comprobarParadas() {
		if(Parada_destino.equals(Parada_origen))Parada_destino="error";
		
	}

	public int getCodigo_tramo() {
		return Codigo_tramo;
	}
	public int getCodigo_linea() {
		return Codigo_linea;
	}
	public String getParada_origen() {
		return Parada_origen;
	}
	public String getParada_destino() {
		return Parada_destino;
	}
	public double getDuracion_recorrido() {
		return Duracion_recorrido;
	}
	
	public void setCodigo_tramo(int c_tramo) {
		Codigo_tramo=c_tramo;
	}
	public void setCodigo_linea(int c_linea) {
		Codigo_linea=c_linea;
	}
	public void setParada_origen(String p_origen) {
		Parada_origen=p_origen;
	}
	public void setParada_destino(String p_destino) {
		Parada_destino=p_destino;
	}
	public void setDuracion_recorrido(double duracion) {
		Duracion_recorrido=duracion;
	}
	public Vector<Tramo> consultarRecorrido(String origen, String destino,String tipo_licencia) throws Exception{
		double duracion=99999999, duracionparcial=0;;
		Tramo origen1=new Tramo();
		Tramo destino1=new Tramo();
		int contador,j=0;
		Vector<Tramo>result=new Vector<Tramo>();
		Producto p=new Producto();
		Vector<Tramo> v= FPTramo.consultRecorrido(origen, destino,tipo_licencia);
		for(int i=0;i<v.size();i=i+2){
			if(v.get(i).getCodigo_tramo()==v.get(i+1).getCodigo_tramo()){
				p=p.getBillete(v.get(i));
				if(p!=null){
				if((duracion>v.get(i).getDuracion_recorrido()&&(p.getCantidad_producto()>0||v.size()<=2))||(i==(v.size()-2)&&duracion==99999999)){
					duracion=v.get(i).getDuracion_recorrido();
					origen1=v.get(i);
					destino1=v.get(i+1);
				}}
			}else{contador=0;
					for(j=v.get(i).getCodigo_tramo();j<v.get(i+1).getCodigo_tramo();j++){
						duracionparcial=duracionparcial+v.get(i).consultarTramo(j, v.get(i).getCodigo_linea()).getDuracion_recorrido();
						p=p.getBillete(v.get(i).consultarTramo(j, v.get(i).getCodigo_linea()));
						if(p!=null){
						if(p.getCantidad_producto()>0||v.size()==2)
							contador++;
					}}
					if((duracion>duracionparcial&&contador==(j-1))||(i==(v.size()-2)&&duracion==99999999)){
						
						duracion=duracionparcial;
						origen1=v.get(i);
						destino1=v.get(i+1);					
					}
				}
		}
		System.out.println("tramo final "+origen1.getCodigo_linea());
		result.add(origen1);result.add(destino1);
		return result;
	}
	
	public int consultarNumTramos() throws Exception{
		return FPTramo.consultNumTramos();
	}
	
	public int consultarTramos(int codigo) throws Exception{
		return FPTramo.consultTramo(codigo);
	}

	public void insertarTramo() throws Exception{
		 FPTramo.insertTramo(this);
	}
	public void deleteTramo(int cod_tramo, int cod_linea) throws Exception{
		 FPTramo.deleteTramo(cod_tramo, cod_linea);
	}
	public Tramo consultarTramo(int cod_tramo, int cod_linea) throws Exception{
		return FPTramo.consultTramo(cod_tramo, cod_linea);

	}
	public void modificarTramo() throws Exception{
		FPTramo.modificarTramo(this, this.Codigo_tramo, this.Codigo_linea);
	}
	
	public Vector<Tramo> getTramos() throws Exception{
		return FPTramo.getTramos();
	}
	
	public boolean existeTramo(int codigo_tramo, int codigo_linea) throws Exception{
		return FPTramo.existsTramo(codigo_tramo, codigo_linea);
	}

	public void modificarTramoEstacion(String nombre_antiguo,String nombre_nuevo) throws Exception {
		FPTramo.modificarTramoEstacion(nombre_antiguo, nombre_nuevo);
		
	}
}

